export async function request<T = any>(
    url: string,
    options: RequestInit = {},
    timeout = 5000  // 默认超时时间为 5 秒
  ): Promise<T> {
    const token = localStorage.getItem('token');
    
    const headers = new Headers(options.headers || {});
    headers.set('Content-Type', 'application/json');
    
    if (token) {
      headers.set('Authorization', `Bearer ${token}`);
    }
  
    // 创建一个 AbortController 实例
    const controller = new AbortController();
    const signal = controller.signal;
  
    // 设置超时定时器
    const timeoutId = setTimeout(() => {
      controller.abort(); // 超时后中止请求
    }, timeout);
  
    try {
      const response = await fetch(url, {
        ...options,
        headers,
        body: options.body ? JSON.stringify(options.body) : undefined,
        signal,  // 将 signal 传递给 fetch
      });
  
      // 清除超时定时器
      clearTimeout(timeoutId);
  
      // 自动处理 token 失效
      if (response.status === 401) {
        // 清除本地token
        localStorage.removeItem('token');
        // 跳转登录页（你可以根据项目实际路由修改）
        window.location.href = '/login';
        throw new Error('未授权，请重新登录');
      }
  
      // 如果响应失败，抛出错误
      if (!response.ok) {
        const errorData = await response.json().catch(() => ({}));
        throw new Error(errorData.message || '请求失败');
      }
  
      // 正常返回数据
      return response.json();
    } catch (error: any) {
      // 如果是超时错误，抛出超时异常
      if (error.name === 'AbortError') {
        throw new Error('请求超时');
      }
      // 其他错误
      throw error;
    }
  }
  